#include <cstdio>
#include <algorithm>
#include <vector>
#include <set>
#include <cstring>
using namespace std;
const int MAXN=5050;
int n,m,s;
int u,v;
//保存根节点
int fa[MAXN];
int vis[MAXN];
vector<int> G[MAXN];
set<int> res;
void dfs(int u,int f){
    //如果父亲节点已经是根节点
    if(fa[u]==f){
        return;
    }
    fa[u]=f;
    for(int i=0;i<G[u].size();i++){
        dfs(G[u][i],f);
    }
}
int main(void){
    scanf("%d%d%d",&n,&m,&s);
    while(m--){
        scanf("%d%d",&u,&v);
        G[u].push_back(v);
    }
    //先对起点dfs 比如环1-2-3-4-1  2为起点 如果不先dfs(2,2) 最终2的根节点记为1 而实际上要记为2
    dfs(s,s);
    //遍历一遍确定根节点
    for(int i=1;i<=n;i++){
        if(fa[i]==0){
            dfs(i,i);
        }
    }
    //标记s是否是根节点之一 如果是 则结果要减去1
    int flag=0;
    for(int i=1;i<=n;i++){
        //printf("%d ",fa[i]);
        if(fa[i]==s){
            flag=1;
        }
        res.insert(fa[i]);
    }
    //printf("\n");
    printf("%d\n",res.size()-flag);
    return 0;
}
